#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
using namespace std;

//int main()
//
//{
//
//	int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = sizeof(ar) / sizeof(int);
//
//	vector<int> v(ar, ar + n);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(100);
//
//	v.resize(20);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(50);
//
//	v.resize(5);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	return 0;
//
//}

//int main()
//{
//	string s;
//	
//	s.reserve(100);
//
//	s.resize(200);
//
//	cout << s[20] << endl;
//
//	return 0;
//}
//
//int main()
//{
//	int nums[] = { 1,2,3,4 };
//	int n = sizeof(nums) / sizeof(int);
//
//	vector<int> v(nums, nums + n);
//
//	return 0;
//}

//void Func(const int& num)
//{
//	Func(num + 1);
//}
//
//int main()
//{
//	int a = 1;
//	int& b = a;
//
//	/*b = b + 1;*/
//
//	Func(a);
//
//	return 0;
//}

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for (int i = 0; i < 32; i++)
        {
            int cnt = 0;
            for (int j = 0; j < nums.size(); j++)
            {
                cnt += (nums[j] >> i) & 1;
            }
            ret += (long long)(cnt % 3) << i;
        }

        return ret;
    }
};

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        vector<int> ret(2, 0);

        int cnt = 0;
        for (int i = 0; i < nums.size(); i++)
            cnt ^= nums[i];

        int index = 0;
        for (; index < 32; index++)
        {
            if ((cnt >> index) & 1)
                break;
        }

        for (int i = 0; i < nums.size(); i++)
        {
            if ((nums[i] >> index) & 1)
                ret[0] ^= nums[i];
            else
                ret[1] ^= nums[i];
        }

        return ret;
    }
};